package com.kongjs.application.util;

import com.kongjs.application.model.vo.QueryMenuVO;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MenuTreeBuilder {
    public static List<QueryMenuVO> buildTree(List<QueryMenuVO> menuList) {
        Map<Long, QueryMenuVO> menuMap = new HashMap<>();
        List<QueryMenuVO> rootMenuList = new ArrayList<>();
        // 首先将所有菜单放入 map 中
        for (QueryMenuVO menu : menuList) {
            menuMap.put(menu.getId(), menu);
        }
        // 构建树结构
        for (QueryMenuVO menu : menuList) {
            Long pid = menu.getPid();
            if (pid == null ||  pid.equals(0L)) {
                // 如果没有父节点，就是根节点
                rootMenuList.add(menu);
            } else {
                // 找到父节点
                QueryMenuVO parentMenu = menuMap.get(pid);
                if (parentMenu != null) {
                    if (CollectionUtils.isEmpty(parentMenu.getChildren())) {
                        parentMenu.setChildren(new ArrayList<>());
                    }
                    parentMenu.getChildren().add(menu);
                }
            }
        }
        if (CollectionUtils.isEmpty(rootMenuList)){
            return menuList;
        }
        return rootMenuList;
    }

}
